Add HTTP transport fallback for non-standard MCP servers#180
Merged
Conversation
Add support for multiple HTTP transport types with fallback: - Try streamable HTTP first (SDK StreamableClientTransport) - Fall back to SSE (SDK SSEClientTransport) - Fall back to plain JSON-RPC over HTTP (manual implementation) This ensures compatibility with safeinputs and other non-standard HTTP MCP servers. Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
- Skip SDK transports when custom headers are provided (they don't support headers) - This fixes safeinputs and similar backends that require authentication - Format code with gofmt Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
- Add nil check for session in SDK method wrappers to prevent panics - Extract callSDKMethod to eliminate code duplication - Improve defensive programming Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix gateway handling of safeinputs backend HTTP server
Add HTTP transport fallback for non-standard MCP servers
Jan 12, 2026
Collaborator
|
@copilot please fix thesel linting issues run golangci-lint
|
Remove unused lastErr variable assignments. The variable was being assigned on lines 196 and 207 but overwritten before use. Now we directly use err in the final error message since it contains the last error from the final transport attempt. Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Multi-Transport HTTP MCP Backend Support - COMPLETE ✓
Problem Solved
The gateway now properly handles different types of HTTP MCP servers, including safeinputs which uses a non-standard JSON-RPC 2.0 over HTTP implementation.
Implementation Summary
File Modified:
internal/mcp/connection.go(229 additions, 46 deletions)Key Changes:
Added HTTPTransportType enum to track transport in use:
HTTPTransportStreamable- for 2025-03-26 specHTTPTransportSSE- for 2024-11-05 specHTTPTransportPlainJSON- for non-standard implementationsEnhanced NewHTTPConnection with smart fallback logic:
Added transport-specific connection functions:
tryStreamableHTTPTransport()- Uses SDK's StreamableClientTransporttrySSETransport()- Uses SDK's SSEClientTransporttryPlainJSONTransport()- Manual HTTP POST implementationRefactored SendRequestWithServerID:
Added callSDKMethod helper:
Defensive programming:
Test Results
Compatibility
What This Enables
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.